package com.example.imageandvideo

import android.Manifest
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.media.MediaMetadataRetriever
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.camera.cameralibrary.CameraActivity
import com.camera.cameralibrary.util.ContentUriUtil
import com.example.imageandvideo.activity.NineImageActivity
import com.permissionx.guolindev.PermissionX
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //权限申请
        initPermission()
    }

    //申请权限
    private fun initPermission() {
        PermissionX.init(this)
            .permissions(
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.RECORD_AUDIO,
                Manifest.permission.CAMERA
            )
            //onExplainRequestReason当用户拒绝权限的时候执行
            .onExplainRequestReason { deniedList ->
                showRequestReasonDialog(deniedList, "即将重新申请的权限是程序必须依赖的权限", "我已明白", "取消")
            }
            //onForwardToSettings 监听用户永久拒绝的权限
            .onForwardToSettings {
                showForwardToSettingsDialog(it, "您需要去应用程序设置当中手动开启权限", "我已明白", "取消")
            }
            /**
             * 参数一: 所有权限是否通过
             * 参数二: 用于记录所有已被授权的权限，
             * 参数三: 用于记录所有被拒绝的权限。
             */
            .request { allGranted, _, _ ->
                run {
                    if (allGranted) {
                        //权限通过了
                    } else {
                        showToast("权限未通过")
                    }
                }
            }
    }

    private fun showToast(value : Any) {
        Toast.makeText(this, value.toString(), Toast.LENGTH_SHORT).show()
    }

    //拍照/录视频按钮
    fun onPhotoVideoClick(view: View) {
        val intent = Intent(this, CameraActivity::class.java)

        //设置拍摄最大值 单位:秒
        intent.putExtra("maxTime", 60000)
        //设置拍摄最小值 单位:秒
        intent.putExtra("minTime", 10)
        startActivityForResult(intent, 100)
    }

    //视频文件按钮
    fun onFileVideoClick(view: View) {
        //文件上传
        val intent = Intent()
        /* 开启Pictures画面Type设定为image */
        //intent.setType("image/*");
        // intent.setType("audio/*"); //选择音频
        intent.type = "video/*" //选择视频 （mp4 3gp 是android支持的视频格式）

        // intent.setType("video/*;image/*");//同时选择视频和图片

        /* 使用Intent.ACTION_GET_CONTENT这个Action */
        intent.action = Intent.ACTION_GET_CONTENT
        /* 取得相片后返回本画面 */
        startActivityForResult(intent, 104)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        Log.i("szjCode", "$resultCode\t$requestCode")

        if (resultCode == 101) {
            val path = data?.getStringExtra("path")
            //设置回调照片
            photo.setImageBitmap(BitmapFactory.decodeFile(path))
        }

        if (resultCode == 103) {
            Toast.makeText(this, "请检查相机权限~", Toast.LENGTH_SHORT).show()
        }

        //文件上传回调
        if (requestCode == 104) {
            //获取图片完整路径
            if (data != null && data.data!=null) {
                val path = ContentUriUtil.getPath(this, data.data)

                showToast("您选择的视频完整路径为:$path")
                //获取图片第一帧 并且赋值
                getVideoThumbnail(path)
            }

        }
    }


    //获取视频文件第一帧图片
    private fun getVideoThumbnail(url: String?) {
        val bitmap: Bitmap?
        //MediaMetadataRetriever 是android中定义好的一个类，提供了统一
        //的接口，用于从输入的媒体文件中取得帧和元数据；
        val retriever = MediaMetadataRetriever()
        //（）根据文件路径获取缩略图
        retriever.setDataSource(url);

        //获得第一帧图片
        bitmap = retriever.frameAtTime

        photo.setImageBitmap(bitmap)
        retriever.release()
    }

    //9 宫格图片
    fun onNineImageClick(view: View) {
        startActivity(Intent(this, NineImageActivity::class.java))
    }
}